Censusを使ってdbtのデータモデルをクラウドサービスに直接連携する
大阪オフィスの玉井です。
Censusは、DWHに入っているデータを、SaaSに直接連携できる便利なサービスです。しかし、Censusはそれでだけでなく、データ変換ツールのdbtと連携することができます。
今回は、DWHのデータを直接指定するのではなく、dbtのデータモデル(のデータ)をSaaSに連携してみました。
やってみた
全体像
BQに入れたSalesforceのデータがあります。これをdbtで変換処理をして、その変換後のデータを、Zendeskに連携します。
Censusは、接続したDWHのテーブルやビューのデータを、色々なSaaS等に直接連携することができます。それに加えて、連携元として、テーブルやビューではなく、dbtで作成したデータモデルを使用することができます。
dbtは、データモデルをSQL(+Jinja)で定義しますが、その(dbtモデルの)実行を、Census側で行うことができます。予めdbtモデルを生成しておくのではなく、Census側の連携に合わせて、Census側からdbtをキックする感じです。
Censusは、dbtのコード群が格納されているGithubのリポジトリを参照して、dbtを実行します。
やってみた環境
- macOS Catalina 10.15.7
- dbt CLI 0.19
- Census
- トライアル版
一応、2021年3月現在、Censusがサポートしているdbtのバージョンは0.18であることを、ここに記しておきます。
下準備
データまわり
下記の記事で使用した環境を継続して使います。準備方法等についても下記を御覧ください。
dbtでデータモデルを用意
Censusでdbt連携を行うにあたり、dbtのデータモデル(が書かれたProject)をGithubに上げておく必要があります。
上記の記事中ではFivetranのTransformation機能で、事前にテーブル結合を行っていましたが、今回はそれをdbt側で行います。具体的には、下記のデータモデルをCensus側から利用します。
SELECT a.*, b.name as owner_name FROM {{ source('salesforce','account') }} as a LEFT JOIN {{ source('salesforce','user') }} as b on a.owner_id = b.id
version: 2 sources: - name: salesforce database: tamai-rei schema: salesforce_us tables: - name: account - name: user
これらを含むProjectを、Githubのリポジトリにプッシュしておきます。
Censusにdbtモデルを登録する
今回のメインはここからです。まず、先程用意した(dbtのコードがある)Gitリポジトリを、Censusの「Model」として登録します。
「Models」というページから、「Load models from dbt project」というメニューに行きます。
リポジトリを選ぶメニューからリポジトリ追加のメニューを選ぶと、Githubのページに遷移するので、そこで登録するリポジトリを選びます。
リポジトリの設定後、残りの設定として、使用するブランチやパス等を設定します。最後のTarget〜の設定は、dbt側(データモデルの生成ロジック側)で、中間モデルの生成を挟むようになっている場合、それらを格納するスキーマ名を指定するものになっています。
接続に成功すると、Census側がdbt Projectを解析しはじめるので、少々待ちます。今回はめちゃくちゃ軽いProjectなので、1分もかからないうちに終わりました。大規模のProjectになると、もう少し時間がかかるかもしれません。
解析が終わると、Census側からモデルの一覧を確認することができます。今回使うのはaccount_plus
です。
Census上で、データモデルの確認と、実行結果のプレビューができます。
dbtモデルを使ったSyncを設定する
dbt projectを登録できたら、それを利用したSyncを作成します。
Connectionは連携元を設定する部分になりますが、今まではここがDWHのテーブルやビューを選んでいたのが、今回はdbtのモデルを使うので、そちらを選びます(選べるようになっている)。
後の内容は前回(冒頭に紹介した記事)と同じです。
諸々の設定完了後、実際にSyncを実行してみます。
連携されたかどうか確認
実際に連携されているかどうか、Zendesk側を確認します(以前、同じ内容で連携したので、Zendesk側で色々消して、もう一度新規データとして連携しました)。
dbtで定義したデータモデル(BQに直接存在しないテーブル/ビュー)が連携されています。
ちなみに、BQ側のクエリ履歴を見ると、Censusがdbtのデータモデルを実行していることがわかります。この仕様を把握しておくことは結構大事です。なぜなら、dbt側で色々なテーブルやビューを利用するような処理が書かれていても、それを実行するCensus側に、それらのテーブル等を参照できる権限がなければ、実行できないからです。
おわりに
本記事の冒頭にも書いたとおり、Censusは、DWHに入っているデータを、SaaSに直接連携できる便利なサービスです。そして、(正しく運用されているデータ分析基盤の)DWHには、新たなデータが蓄積され続けます。それゆえ、各種SaaSにも、なるべく最新のデータを常に連携し続けたいと考えます。その時、連携したいデータをdbtで作っている場合、dbtとCensusの実行スケジュールをうまく調整する必要があります。しかも、データ量によっては、dbt側の処理が終わりきらない間に、Census側の実行が始まってしまうリスクもあります(最新のデータが連携されなくなる)。
しかし、今回の連携を行えば、Censusの連携時にdbtも連動させるため、2者間における実行時間のスケジューリングで苦しむことが無くなります。連携されるデータも常に最新のものとなります。非常に便利な連携だと思いました。
ちなみに、私が見た限り、今のところは対応リポジトリサービスがGithubしかないので、他のGitサービスも対応されると嬉しいと思いました。